# -*- coding=utf-8-*-
"""
@File:memory_selection
@Author:Created by Han X.Y
@Date:on 2021/7/19 20:58 
"""
"""
使用索引来访问列表的子树
树的根：myTree[0]
左子树:myTree[1]
右子树：myTree[2]

概念：
节点的度：指一个节点的子树个数
树的度：一棵树中的节点的度的最大值
叶子：度为零的节点
高度：树中节点的最大层次称为树的高度或深度

"""
myTree = [
    'a',
    ['b',
     ['d', [], []],
     ['e', [], []]
     ],
    ['c',
     ['f', [], []],
     []
     ]
]
print(myTree)
for i in range(len(myTree)):
    print(myTree[i])



"""
二叉树：指每个节点最多有两个子树的有序树，通常将两个子树的根分别称作左子树和右子树
特点：
    - 每一个节点至多只有两个子树，即不存在度大于2的节点
    - 二叉树的子树有左右之分，顺序不能颠倒
    - 二叉树的第i曾最大有2**i-1个节点
    - 深度为k的二叉树最多有2**k-1个节点
    - 对于任何一颗二叉树T，如果其终端节点(即叶子数)为n0,度为2的节点数为n2,则n0=n2+1
    - 二叉树的基本状态：空二叉树、只有根节点的二叉树、右子树为空的二叉树、左子树为空的二叉树、左右子树均非空的二叉树
"""

def BinaryTree(r):
    """
    定义二叉树
    """
    return [r,[],[]]

def insertLeft(root,newBrach):
    """
    插入左子树
    """
    t=root.pop(1)
    if len(t)>1:
        root.insert(1,[newBrach,t,[]])
    else:
        root.insert(1,[newBrach,[],[]])
    return root

def insertRight(root,newBranch):
    """
    插入右子树
    """
    t=root.pop(2)
    if len(t)>1:
        root.insert(2,[newBranch,[t],[]])
    else:
        root.insert(2,[newBranch,[],[]])
    return root

def getRootVal(root):
    """
    获取根节点值
    """
    return root[0]

def setRootVal(root,newVal):
    """
    获取右根节点的值
    """
    root[0]=newVal

def getRightChild(root):
    """
    获取右孩子节点
    """
    return root[2]
